﻿using System.Drawing;
using System.Windows.Forms;

namespace Boxman {
    // 基本游戏物体
    class BaseGameObject{
        // 移动结果
        public enum MoveResult {
            CANNOT_MOVE,        // 本身不具有移动能力
            NO_MOVE,            // 没有移动
            NORMAL_MOVED,       // 正常移动
            ARRIVED_ON_DEST,    // 移动到目标上
            LEFT_FROM_DEST      // 离开目标
        }

        // 类型
        public enum Type {
            NOTHING,        // 什么也没有
            WALL,           // 墙
            BACKGROUND,     // 背景
            DESTINATION,    // 箱子的目的地
            BOX,            // 箱子
            MAN             // 小人
        }

        public Type _Type { get; }              // 类型
        protected readonly Graphics mDrawer;    // 绘图者
        protected Image mImage;                 // 图片
        protected int mX;                       // 横向坐标
        protected int mY;                       // 纵向坐标

        /**
         * 构造方法。
         * @param drawer    绘图者
         * @param type      类型
         * @param x, y      左上角坐标
         */
        public BaseGameObject(Graphics drawer, Type type, int x, int y) {
            // 初始化成员
            mDrawer = drawer;
            _Type = type;
            mX = x;
            mY = y;

            // 加载图片
            string imageFilePath = string.Format(Const.IMAGE_FILE_PATH, (int)type);
            mImage = Image.FromFile(imageFilePath);

            // 绘制自身
            this.Draw();
        }

        /**
         * 绘制自身。
         */
        public void Draw() {
            mDrawer.DrawImage(mImage, mX * Const.GRID_SIZE, mY * Const.GRID_SIZE, Const.GRID_SIZE, Const.GRID_SIZE);
        }

        /**
         * 移动。
         * @param direction     方向
         * @param moveResult    移动结果
         * @return 被推动的箱子
         */
        public virtual BaseGameObject Move(Keys direction, ref MoveResult moveResult) {
            moveResult = MoveResult.CANNOT_MOVE;
            return null;
        }
    }
}
